package com.nowcoder.community.service;

import com.nowcoder.community.dao.DiscussPostMapper;
import com.nowcoder.community.entity.DiscussPost;
import com.nowcoder.community.util.SensitiveFilter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.util.HtmlUtils;

import javax.swing.text.html.HTML;
import java.util.List;

@Service
public class DiscussPostService {
    @Autowired
    private DiscussPostMapper discussPostMapper;

    @Autowired
    private SensitiveFilter sensitiveFilter;

   public List<DiscussPost> findDiscussPosts(int userId,int offset, int limit){
        return discussPostMapper.selectDiscussPosts(userId,offset,limit);
    }

    public int findDiscussPostRows(int userId){
       return discussPostMapper.selectDiscussPostRows(userId);
    }

    /**
     * 新增帖子
     */
    public int addDiscussPost(DiscussPost discussPost){
        //空值异常处理
        if(discussPost == null){
            //抛出不合法参数异常
            throw  new IllegalArgumentException("参数不能为空");
        }

        //转义HTML标记
        /**
         * HtmlUtils.htmlEscape()，用于将字符串中的 HTML 特殊字符进行转义,以确保在将其显示在 HTML 页面上时不会被浏览器解释为 HTML 标签或脚本
         * 这种转义可以帮助防止恶意用户利用输入框等位置注入恶意脚本，防止 XSS（跨站脚本攻击）等安全漏洞
         *     例如，如果 discussPost.getTitle() 返回的标题中包含 <script>alert('XSS')</script> 这样的内容，
         *          使用 HtmlUtils.htmlEscape() 方法可以将其转义为 &lt;script&gt;alert('XSS')&lt;/script&gt;
         *          这样就可以安全地在页面上显示该标题而不会触发脚本执行
         */
        discussPost.setTitle(HtmlUtils.htmlEscape(discussPost.getTitle()));
        discussPost.setContent(HtmlUtils.htmlEscape(discussPost.getContent()));
        //过滤敏感词
        discussPost.setTitle(sensitiveFilter.filter(discussPost.getTitle()));
        discussPost.setContent(sensitiveFilter.filter(discussPost.getContent()));

        return discussPostMapper.insertDiscussPost(discussPost);
    }

    /**
     * 查看帖子详情
     */

    public DiscussPost findDiscussPostById(int id){
      return  discussPostMapper.selectDiscussPostById(id);
    }

    /**
     * 修改帖子评论数量
     */
    public int updateCommentCount(int id, int commentCount){
        return  discussPostMapper.updateCommentCount(id,commentCount);
    }
}
